Over time, computer hardware has become faster and more powerful. For example, computers of today can have multiple processor cores that operate in parallel. Programmers would like for different pieces of the program to execute in parallel on these multiple processor cores to take advantage of the performance improvements that can be achieved. Thus, many software applications have been developed that process some of the data in parallel. For example, some database applications, such as MICROSOFT® SQL Server, support parallel scans against the data. In other words, data can be retrieved from a database in parallel by two or more threads at the same time. In such a scenario, one thread retrieves part of the data requested by a query or other read operation, while another thread retrieves another part of the data.
Bottlenecks can arise at the physical disk level when using parallel scanning techniques against data in data stores. One inefficiency with parallel scanning can involve disk head randomization. Since any thread can read data from any disk, disk heads are moved back and forth across sectors of the disks. This randomized access by any thread against any disk can cause inefficient access to the data because randomized access to data has greater overhead than sequential access. Another inefficiency that can arise when performing parallel scans is that scans for data do not take advantage of the fact that some portion of memory has a lower latency than other portions of memory. This is called non-NUMA awareness. Yet another inefficiency that can arise with parallel scans is when input/output interrupt processing is allowed to arise on any processing unit available in the system, which results in higher latency.